package org.tri.persistence.search;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.tri.entity.Productor;

/**
 * La clase {@code BusquedaProductor} permite realizar busqueda de
 * productores, filtrando los resultados por diferentes criterios.
 * @author kiira
 * @version 1.0, Nov 19, 2011
 */
public class BusquedaProductor extends Busqueda<Productor> {

    /**
     * Inicializa la busqueda.
     */
    public BusquedaProductor() {
        super( Productor.class );

    }//end constructor

    /**
     * Restringe la busqueda a partir de la razón social
     * del productor.
     * @param razonSocial razón social por la cual filtrar.
     */
    public void porRazonSocial( String razonSocial ) {
        //creamos y agregamos la restriccion
        Criterion restriccionRazonSocial = Restrictions.like( 
                "razonSocial", "%" + razonSocial + "%" );

        agregarCriterio( restriccionRazonSocial );

    }//end método porRazonSocial

    /**
     * Restringe la busqueda a un solo productor, identificado
     * por el cuit indicado.
     * @param cuit cuit por el cual filtrar.
     */
    public void porCuitExacto( Long cuit ) {
        //creamos y agregamos la restriccion
        Criterion restriccionCuit = Restrictions.eq( "cuit", cuit );

        agregarCriterio( restriccionCuit );

    }//end método porCuitExcato

    /**
     * Restringe la busqueda a los productores cuyo cuit
     * empieze con el cuit indicado.
     * @param cuit cuit o porción de cuit por el cual filtra.
     */
    public void porCuit( String cuit ) {
        //creamos y agregamos la restriccion
        Criterion restriccionCuit = Restrictions.sqlRestriction(
                String.format( "CAST( {alias}.cuit as string ) like '%s%%'",
                               cuit ) );

        agregarCriterio( restriccionCuit );

    }//end método porCuit

    /**
     * Restringe la busqueda a los productores cuyo cuit
     * empieze con el cuit indicado.
     * @param cuit cuit o porción de cuit por el cual filtra.
     */
    public void porCuit( Long cuit ) {
        porCuit( String.valueOf( cuit ) );

    }//end método porCuit

}//end clase BusquedaProductor

